package com.example.lt.schedul;

import com.example.lt.entity.video.HotVideo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Queue;

/**
 * @Author 小涛Tao
 * @Date: 2024/08/12/11:14
 * version 1.0 注释：
 **/
public class TopK {

    private int k = 0;

    private Queue<HotVideo> queue;

    public TopK(int k,Queue<HotVideo> queue){
        this.k = k;
        this.queue = queue;
    }

    public void add(HotVideo hotVideo) {
        if (queue.size() < k) {
            queue.add(hotVideo);
        } else if (queue.peek().getHot() < hotVideo.getHot()) {
            queue.poll();
            queue.add(hotVideo);
        }
    }

    public List<HotVideo> get() {
        final ArrayList<HotVideo> list = new ArrayList<>(queue.size());
        while (!queue.isEmpty()) {
            list.add(queue.poll());
        }
        // 把list集合反转过来，因为queue是从热度小的video开始往list集合中添加的，热度小的video反而在list集合的前面
        // 所以要把热度大的反转到list的前面
        Collections.reverse(list);
        return list;
    }

}
